在我们写 shell 脚本的时候,特别在调试的时候经常需要注释多行命令,但在每一行前输入 #
,显得有些麻烦。
基于 shell 命令的灵活性,我们可以使用下面的方法:
方法一(这是比较稳妥的作法):可以采用 HERE DOCUMENT
特性,实现多行注释,比如
<<'COMMENT'
...
COMMENT
举例如下:
#!/bin/bash
echo "Say Something"
<<COMMENT
your comment 1
comment 2
blah
COMMENT
echo "Do something else"
方法二 ,直接采用 :
这个命令的特殊作用,但这种做法有很多局限性,而且会影响性能,下面会介绍它的原理及性能分析。
如下是最简单的使用方法:
: '
COMMENT1
COMMENT2
'
即 :
+ 空格
+ 单引号
。
解释如下:
首先要知道 :
在 shell 中的特殊作用,它是内置的命令,先看一下它的帮助说明:
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
即,:
它也是一个命令,既然是命令就会可以给它传参数,但因它会过滤掉这些参数,而单引号
括起来的是普通的代码部分表示字符串,所以我们刚好可将来用来代表注释,表示在 :
后的 单引号
括起来的部分在程序执行的时候忽略。
另外如果不好理解,直接把它当作汇编中的 NOP
, python 中的 pass
,它只是一个占位,每次返回都是真,即 $?
的话,结果会是 0
。
如此一来,此方法是不是很绝妙? 但事实上里面潜藏着很多问题:
- 它不会注释 shell 脚本中本身带有
单引号
的语句部分,除非你将程序中的单引号全部换成又引号,这样不爽。 - 还是就是,虽然
:
会忽视后面的参数,但其实参数部分还是可能会被执行些操作,比如替换操作,文件截取操作等。所以这样会影响到代码的执行效率。
例如:
: > file
会截取 file 。
: $(dangerous command)
这个替换操作照样会执行。
所以第二种方法,只能临时用用。
第三种方法,即:采用 :
+ << 'COMMENT'
的方式。
#!/bin/bash
echo "Say Something"
: <<'COMMENT'
your comment 1
comment 2
blah
COMMENT
echo "Do something else"
注意:要加上单引号部分,有时候虽然不加不会有什么问题,但还是要加,以防出现莫名其妙的意外发生,比如发生字符扩展,命令替换等。
但最保险的方法还是每行前加上 #